//
//  CinemaDataModel.m
//  ShowTimeApp
//
//  Created by Ruby on 10/24/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "CinemaDataModel.h"
#import "Cinema.h"
#import "ShowTime.h"
#import "TicketInfo.h"
#import "Movie.h"
#import "CinemaService.h"
#import "ServiceAccessHelper.h"

@implementation CinemaDataModel

-(id)initCinemaDataModel{
    [self initBaseDataModel];
    //[self addObjects];
    return self;
}

-(NSMutableArray*)getAllCinemaSortByIDAscending{
    // Add a sort descriptor
	NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"ID" ascending:YES selector:nil];
    // Goi ham o lop cha
    [self fetchObjects:@"Cinema" sortBy:sortDescriptor];
    return (NSMutableArray*)fetchResultController.fetchedObjects;
}

-(NSMutableArray*)getAllCinemaSortByNameAscending{
    // Add a sort descriptor
	NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:nil];
    // Goi ham o lop cha
    [self fetchObjects:@"Cinema" sortBy:sortDescriptor];
    return [(NSMutableArray*)fetchResultController.fetchedObjects retain];
}

-(NSMutableArray*)getAllCinemaByGroupNameSortByNameAscending:(NSString *)groupName{
    // Add a sort descriptor
	NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:nil];
    
    // Add a predicate
    NSString* condition= [NSString stringWithFormat:@"GroupName like %@",groupName];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:condition];
    
    // Goi ham o lop cha
    [self fetchObjects:@"Cinema" sortBy:sortDescriptor byPredicate:predicate];
    return (NSMutableArray*)fetchResultController.fetchedObjects;   
    
    // Goi ham o lop cha
    //    [self fetchObjects:@"Cinema" sortBy:sortDescriptor byPredicate:predicate];
    //    if(fetchResultController.fetchedObjects.count>0)
    //    {
    //        for (Cinema *cine in self.fetchResultController.fetchedObjects) 
    //            NSLog(@"%@%@%@",cine.ID,cine.Name,cine.GroupName);
    //    }
    // 
}

-(Cinema*)getDetailByID:(int)ID{
    Cinema* cine = nil;
    NSString* condition=[NSString stringWithFormat:@"ID==%@",[NSNumber numberWithInt:ID]];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:condition];
    cine= (Cinema*)[self fetchObject:@"Cinema" byPredicate:predicate];
    return cine;
}

-(void)insertObject:(id)cinema{
    CinemaService_CinemaEntity * newCinema = (CinemaService_CinemaEntity *)cinema;
    Cinema *c = (Cinema*)[NSEntityDescription insertNewObjectForEntityForName:@"Cinema" inManagedObjectContext:self.managedObjectContext];
    c.ID = [newCinema ID_];
    c.Name = [newCinema Name];
    c.Tel=[newCinema Tel];
    c.Address=[newCinema Address];
    c.Website = [newCinema Website];
    c.ImageUrl = [newCinema ImageUrl];
    c.GroupName=[newCinema GroupName];
    c.Description=[newCinema Description];
    c.City=[newCinema City];
    c.Fax=[newCinema Fax];
    c.Email=[newCinema Email];
}

-(void)insertObjects:(NSMutableArray *)cinemaList{
    for (id c in cinemaList){
        [self insertObject:c];
    }
}

+(Cinema*)convertFromCinemaService_CinemaEntity:(CinemaService_CinemaEntity *)svCinemaEntity TodbCinemaEntity:(Cinema *)dbCinemaEntity{
    CinemaService_CinemaEntity * newCinema = (CinemaService_CinemaEntity *)svCinemaEntity; 
    dbCinemaEntity.ID = [newCinema ID_];
    dbCinemaEntity.Name = [newCinema Name];
    dbCinemaEntity.Tel=[newCinema Tel];
    dbCinemaEntity.Address=[newCinema Address];
    dbCinemaEntity.Website = [newCinema Website];
    dbCinemaEntity.ImageUrl = [newCinema ImageUrl];
    dbCinemaEntity.GroupName=[newCinema GroupName];
    dbCinemaEntity.Description=[newCinema Description];
    dbCinemaEntity.City=[newCinema City];
    dbCinemaEntity.Fax=[newCinema Fax];
    dbCinemaEntity.Email=[newCinema Email];
    return dbCinemaEntity;
}

-(void)output:(NSMutableArray *)cinemaList{
    if(cinemaList.count>0)
    {
        for (id cinema in cinemaList){ 
            Cinema* c = (Cinema*)cinema;
            NSLog(@"%@ - %@ - %@",c.ID,c.Name,c.Address);
        }
    }    
}

-(void)addObjects{
//get all cinema from service

    Cinema *cine1 = (Cinema*)[NSEntityDescription insertNewObjectForEntityForName:@"Cinema" inManagedObjectContext:self.managedObjectContext];
    cine1.ID=[NSNumber numberWithInt:1];
    cine1.Name=@"MEGASTAR CINEPLEX HUNG VUONG";
    cine1.Address=@"Tầng 7 - Hùng Vương Plaza, 126 Hùng Vương, Q. 5";
    cine1.Tel=@"(848) 222 0388";
    cine1.GroupName=@"MEGARSTAR";
    cine1.City=@"Ho Chi Minh";
    cine1.Website=@"http://megastar.vn/";
    
    Cinema *cine2 = (Cinema*)[NSEntityDescription insertNewObjectForEntityForName:@"Cinema" inManagedObjectContext:self.managedObjectContext];
    cine1.ID=[NSNumber numberWithInt:2];
    cine2.Name=@"GALAXY CINEMA";
    cine2.Address=@"116 Nguyễn Du - Q.1";
    cine2.Tel=@"(848) 222 0388";
    cine2.GroupName=@"GALAXY";
    cine2.City=@"Ho Chi Minh";
    cine2.Website=@"http://megastar.vn/";
    
    Movie *movie1 = (Movie*)[NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:self.managedObjectContext];
    movie1.ID=[NSNumber numberWithInt:1];
    movie1.TitleVI=@"Tay đấm thép";
    movie1.TitleEN=@"Real Steel";
    movie1.Genre=@"Hành Động, Phiêu Lưu, KH Viễn Tưởng/ Thần Thoại";
    movie1.Description=@"Câu chuyện xảy ra trong bối cảnh tương lai khi mà quyền Anh robot trở thành môn thể thao phổ biến. Charlie - một người bảo trợ quyền Anh - tìm thấy một con robot phế thải, và tin rằng nó sẽ giúp anh vô địch. Trong khi Charlie hy vọng sẽ được leo lên vị trí dẫn đầu thì anh cũng nhận ra mình có đứa con trai 11 tuổi đang muốn biết nhiều hơn về bố mình.";
    movie1.Length=[NSNumber numberWithInt:100];
    movie1.Director=@"Shawn Levy";
    
    Movie *movie2 = (Movie*)[NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:self.managedObjectContext];
    movie2.ID=[NSNumber numberWithInt:2];
    movie2.TitleVI=@"Breaking Dawn";
    movie2.TitleEN=@"Real Steel";
    movie2.Genre=@"Phiêu Lưu, Tâm lý, Tình cảm";
    movie2.Description=@"Bella và Edward phải đối mặt với những thử thách khó khăn đi theo họ suốt hành trình làm đám cưới, hưởng tuần trăng mật và thai nghén em bé nửa người nửa ma cà rồng.";
    
    movie1.Director=@"Bill Condon";
    
    ShowTime *showtime1 = (ShowTime*)[NSEntityDescription insertNewObjectForEntityForName:@"ShowTime" inManagedObjectContext:self.managedObjectContext];
    showtime1.Movie = movie1;
    showtime1.Cinema = cine1;
    
    ShowTime *showtime2 = (ShowTime*)[NSEntityDescription insertNewObjectForEntityForName:@"ShowTime" inManagedObjectContext:self.managedObjectContext];
    showtime2.Movie = movie2;
    showtime2.Cinema = cine1;
    
    ShowTime *showtime3 = (ShowTime*)[NSEntityDescription insertNewObjectForEntityForName:@"ShowTime" inManagedObjectContext:self.managedObjectContext];
    showtime3.Movie = movie1;
    showtime3.Cinema = cine2;

   NSError *error;
//	if (![self.managedObjectContext save:&error]) NSLog(@"Error: %@", [error localizedDescription]);
    [self saveContent:error];
}

-(void)deleteAll{
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"ID" ascending:YES selector:nil];
    [self fetchObjects:@"Cinema" sortBy:sortDescriptor];
    [self removeObjects];
}

@end
